# stage 2 - D/E 리서치

------------------------------------------------------------------------------------------------------

## Task D1 (python code)
Goal: claim_id 갯수만큼 C-###_claim_information.json 생성

Stage 2 - Task A / B / C 결과물
- claim_identification_view.json
- claims_identified.json
- claims_identified_case_type.json

claims_identified_case_type.json -> "claim_id"에 연결된 "claim_type"

"claim_type"의 [String]을 `claims_identified.json`에 첨가
  - "claim_id"별
  - "claim_id" 바로 아래에 "case_kind" 항목 신설하여 "claim_type"의 [String]을 입력

-> claims_identified_case.json 생성


# "claim_id"별 개별 문서 생성: C-###_claim_information.json (claim_id 갯수만큼 생성)

- claims_identified_case.json의 "claim_id"(C-###)별로 아래 정보 매칭
  - "source_fact_ids"에 있는 F-### 식별하여 "fact_id"로 설정
  - Fact_Ledger_base.json에서 "fact_id"에 해당하는 F-###별로 존재하는 정보 "source_bo_id" ~ "legal_calculation_object" 정보를 "fact_id"별로 stack하여 기입
  - Fact_Ledger_base.json에서 "fact_id" F-###마다 존재하는 "evidence_refs"의 개별 E-###를 "evidence_index"로 두고, evidence_indexed.json의 "evidence_index"와 동일 취급
  - evidence_indexed.json의 "evidence_index" 아래 존재하는 "doc_uid" ~ "key_parties" 정보만 추려서 "evidence_index"별로 stack하여 기입

------------------------------------------------------------------------------------------------------

## Task D2 (실험 1)

1. C-###_claim_information.json들을 "case_kind"별로 묶어서 grouping 
2. Group별로 "청구취지작성규칙" 문서 연결
3. Group별 C-###에 대해서 청구취지/청구원인 작성 (완전 병렬 - Gemini-3.1-Flash-Lite-Preview, reasoning=high, verbosity=high)

## Task D2 (실험 2)

1. C-###_claim_information.json들을 "case_kind"별로 묶어서 grouping 
2. Group별로 "청구취지작성규칙" 문서 연결
3. Group별 C-###에 대해서 청구취지/청구원인 작성 (Group간 병렬 / Group내 1번 claim만 우선 처리 / 다음 claim들은 병렬로 동시처리 with Cache Hit - GPT-5.4, reasoning=high, verbosity=high)

--------------------------------------------------------------------------------------------------------


E-012
E-008
E-002

--------------------------------------------------------------------------------------------------------

`stage_2_claim_identification_text_v2.yml`을 실행하여 얻은 결과물이
- claim_identification_view.json
- claims_identified.json
- claims_identified_case_type.json
이다. 

이제 stage 2의 Task_D에서는 stage 1의 결과물들 중 일부와 claims_identified.json, 그리고 claims_identified_case_type.json를 입력받아 청구권(claim_id)별로 청구취지 및 청구원인을 작성하는 데 필요한 정보 블록을 개별적으로 생성한다. 즉, 청구권 claim_id가 C-001이면 C-001에 대해 생성하는 정보 블록은 C-001_claim_information.json이다. 그리고 이 파일들은 식별된 청구권 갯수, 즉 claims_identified.json에 식별된 claim_id 갯수만큼 생성한다. 

Task_D의 입력파일들은 아래와 같다:
- evidence_indexed.json
- Fact_Ledger_base.json
- claims_identified.json
- claims_identified_case_type.json
- evidence_actio_support.json
- fact_actio_support.json

기준이 되는 파일은 `claims_identified.json`이며, 개별 정보 블록 생성 방식은 아래와 같다.
1. 기준 문서에서 "claim_id"별로 JSON 블록을 떼내고, 
2. "claim_id"를 claims_identified_case_type.json의 동일 claim_id에 연결하여, "claim_id"에 연결된 "claim_type"을 "case_kind"에 기입할 정보로 사용한다.
3. claims_identified.json의 "claim_id"(C-###)별로 아래 정보 매칭
  - "source_fact_ids"에 있는 F-### 식별하여 Fact_Ledger_base.json의 "fact_id"에 매칭
  - Fact_Ledger_base.json의 "fact_id"에 해당하는 F-###별로 존재하는 정보 "source_bo_id" ~ "legal_calculation_object" 정보를 "fact_id"별로 stack하여 기입
  - Fact_Ledger_base.json에서 "fact_id" F-###마다 존재하는 "evidence_refs"의 개별 E-###를 "evidence_index"로 두고, evidence_indexed.json의 "evidence_index"와 동일 취급 
  - evidence_indexed.json의 "evidence_index" 아래 존재하는 "doc_uid" ~ "key_parties" 정보만 추려서 "evidence_index"별로 stack하여 기입
4. 만일 "case_kind"가 "사해행위취소"일 경우 1부터 3까지 외 아래 두 가지 작업을 추가로 진행한다. 
4.1 기준 문서의 "claim_id"별 JSON 정보 블록과 연결된 Fact_Ledger_base.json의 정보 블록, 그리고 evidence_indexed.json의 연결된 정보 블록(위에서 설명한 1번부터 3번까지 작업에 따른 연결 정보 블록)에서 evidence_index, source_bo_id를 오름차순으로 식별한다. 
4.2 식별된 evidence_index가 존재하는 evidence_actio_support.json의 정보 블록을 가지고 와서 아래로 stack하여 기입한다. 
4.3 source_bo_id에 해당하는 bh##를 fact_actio_support.json의 "source_bo_id"에 매칭하여, 매칭된 bo_id에 해당하는 정보 블록을 가지고 와서 아래로 stack하여 기입한다. 


claim_id_info_relief_summary_schema.txt에는 지금까지 설명한 방식을 토대로 C-001과 C-005에 대한 예시 JSON Schema를 제시한다.




F-002 / E-012
F-006 / E-008
F-012 / E-007
F-016 / E-007
F-022 / E-002

E-002
E-007
E-008
E-012

Bh2
Bh6
Bh12
Bh16
Bh22

----------------------------------------------------------------------------------

Task_D에서 아래와 같이 추가적으로 정보를 작성하려고 한다. 

## 청구취지 작성 규칙 자료: 
- case_kind = 대여금 청구 → `청구취지작성규칙_대여금청구.md`
- case_kind = 구상금 청구 → `청구취지작성규칙_구상금청구.md`
- case_kind = 보증채무금 청구 → `청구취지작성규칙_보증채무금청구.md`
- case_kind = 사해행위취소 청구 → `청구취지작성규칙_사해행위취소청구.md`

## 청구취지 작성 추가 자료:
- case_kind = 사해행위취소 청구 → "actio_pauliana_calc_v2.json"

그래서, 아래의 JSON 형식
---
{
  "identified_claims": [
    {
      "claim_id": "C-001",
      "case_kind": ["String"], / claims_identified_case_type.json의 "claim_id"과 pair로 연결된 "claim_type"을 기입 ...
---
에서 "case_kind" 아래에 
---
"relief_summary_statement_rule": [String], / 청구취지 작성 규칙 자료 매핑
"relief_summary_statement_further_rule": [String], / 청구취지 작성 추가 자료 매핑 only if "case_kind"가 "사해행위취소"일 때만
---  
와 같이 추가로 정보를 입력하려고 한다. 

위의 요구사항을 반영하여 Task_D의 python code를 업데이트하여 stage_2_Task_D_code_v1.yml으로 생성하라. 기존 코드는 바꾸지 마라.  

----------------------------------------------------------------------------------

`C-005_claim_information.json`, `C-006_claim_information.json`처럼 사해행위취소 청구에서 가액배상을 청구해야 하는 경우, `C-005_claim_information.json`, `C-006_claim_information.json`에 기입된 정보만으로 actio_pauliana_calc_v3 필드를 다 채워넣을 수 없을 때, 추가적으로 actio_pauliana_calc_v3 필드를 채워넣을 수 있도록 아래 요구사항을 엄격하게 반영하여 GPT-5.4 reasoning=high에 최적화된 프롬프트를 작성하라. 


<요구사항>
1. 변론 종결 시점은 고객(원고)의 상담 일자로부터 1년 뒤로 가정한다. 고객 상담 일자는 고객상담문서 client_meeting.md에서 찾는다.
2. 변론 종결 시점의 시가 후보는 "변론 종결 시점까지 변동 가능한 자산 가치는 현재 시점에서 식별되는 자산 가치로 대체"한다. 
3. 직접 증거 공백이어서 증명력은 낮지만 입력값 자체는 구성가능하다면 입력값을 기입한다. 즉, 증빙강도가 완비된 특정이 아니라도 회의록(client_meeting.md) + BO + evidence_all.json로부터 정보를 추출할 수 있다면 추출 정보를 입력값으로 사용한다. 
4. evidence_all.json → BO.json → client_meeting.md 순서로 소스 정보를 활용하며 
  4.1 evidence_all.json에서 수치와 문언을 뽑고(금액·날짜·이율·접수번호·등기변동·특약문구 같은 hard scalar는 여기서 먼저 추출),
  4.2 BO로 사건행위와 역할에 매핑하고(금액·날짜·이율·접수번호·등기변동·특약문구 같은 hard scalar는 여기서 먼저 추출),
  4.3 client_meeting으로 해석상 빈칸과 현재가치 proxy를 보강한다(보조 해석 자료로 활용). 
</요구사항>

----------------------------------------------------------------------------------

위에서 제시한 프롬프트는 현재 다루는 사건과 `C-005_claim_information.json`, `C-006_claim_information.json`에 완전히 의존적인 특화형 프롬프트로 보인다. 

현재 다루는 사건이 아닌 다른 사건에서 식별된 청구권이 사해행위취소 청구에 해당하고, 또한 가액배상을 청구하는 것이 맞다는 결론에 도달한다면 동일하게 적용할 수 있는 좀 더 일반화된 프롬프트로 GPT-5.4에 최적화하여 재작성하라. 단, 아래 정보에 기반을 두어라. 

- client_meeting.md
- BO.json
- evidence_all.json
파일들의 형식은 동일하며 client_meeting.md와 evidence_all.json으로부터 시작해서 stage 1 결과물들(BO 포함) 및 stage 2의 Task_A/B/C 결과물들이 차례대로 생성된다. 
- actio_pauliana_calc_v3는 변함없이 사용된다. 


-----------------------------------------------------------------------------------------------------


{
  "template_name": "mortgage_fraudulent_act_module_v1",
  "schema_version": "1.0-draft",
  "jurisdiction": "KR",
  "language": "ko-KR",
  "currency": "KRW",
  "purpose": "근저당권설정 자체가 사해행위인 사건에서 계약취소·등기말소를 기본구조로 삼고, 경매·배당 또는 원상회복 불능 시 배당금 상당 지급 또는 가액배상까지 분기할 수 있도록 계산·검증·문안 입력값을 생성하는 전용 모듈",
  "design_principles": [
    "근저당권설정 자체가 사해행위이면 기본 remedy는 근저당권설정계약 취소 + 근저당권설정등기 말소이다.",
    "근저당권설정형은 일반 소유권이전형 가액배상 엔진과 별도로 당사자 역할, 피담보채권, 등기상태, 경매·배당 여부를 집중 관리한다.",
    "등기말소가 가능하면 금전배상보다 말소를 우선한다.",
    "배당이 이미 이루어졌거나 원상회복이 곤란한 경우에만 배당금 상당 지급 또는 가액배상을 검토한다.",
    "금전지급형으로 분기되는 경우에도 소장 단계에서는 잠정 특정액을 사용하고 감정·배당자료 보강 후 변론종결 전 최종화한다.",
    "채권최고액과 실제 피담보채권액을 엄격히 구분한다.",
    "전득자, 소유자, 근저당권자, 담보제공자, 피담보채권자 역할을 분리한다."
  ],


`mortgage_fraudulent_act_module_v1.json`은 근저당권설정 자체가 사해행위인 사건에서 계약취소·등기말소를 기본구조로 삼고, 경매·배당 또는 원상회복 불능 시 배당금 상당 지급 또는 가액배상까지 분기할 수 있도록 계산·검증·문안 입력값을 생성하는 모듈이다. 

특정한 `C-###_claim_information.json`이 
1. 사해행위취소 청구에 해당하고 계약취소·등기말소가 청구취지로 충분한 경우,
2. 사해행위취소 청구에 해당하고 계약취소·등기말소를 넘어 경매·배당 또는 원상회복 불능 시 배당금 상당 지급 또는 가액배상을 해야 하는 경우, 
각각에 해당한다고 가정하자. 

1의 경우는 일반적인 사해행위취소 청구 청구취지 작성 규칙을 따라 청구취지를 쉽게 작성할 수 있을 것이다. 그런데 2의 경우라면 `actio_pauliana_calc_v3.json`를 사용하여 청구취지 작성이 가능한가? 즉, 2와 같은 경우 `mortgage_fraudulent_act_module_v1.json`와 `actio_pauliana_calc_v3.json`은 그 역할이 중복되는가? 둘 중 하나만 사용해도 되는가? 아니면 `mortgage_fraudulent_act_module_v1.json`만으로도 처리가 가능한 경우가 존재하는가? 또한, `mortgage_fraudulent_act_module_v1.json`와 `actio_pauliana_calc_v3.json` 둘 다 사용해야 하는 경우가 있는가?
 
-----------------------------------------------------------------------------------------------------

위에서 `C-###_claim_information.json`의 정보만으로는 `actio_pauliana_calc_v3.json`를 채워넣는 것이 불가능하다는 것을 알았다. 그래서 evidence_all.json -> BO.json -> client_meeting.md 순서로 소스 정보를 활용하여 `actio_pauliana_calc_v3.json` 필드를 대부분 채워넣는 것이 가능함을 알았다. 

이와 동일한 논리로 `C-###_claim_information.json`의 정보만으로는 `mortgage_fraudulent_act_module_v1` 필드를 채워넣는데 부족함이 있을 것으로 예상된다. 그렇다면, `mortgage_fraudulent_act_module_v1` 필드를 채우는데 필요한 소스를 evidence_all.json, BO.json, client_meeting.md 중에서 찾고, `mortgage_fraudulent_act_module_v1` 필드를 채우는 작업을 지시하는 프롬프트를 GPT-5.4에 최적화하여 작성하라. 


-----------------------------------------------------------------------------------------------------


Stage 2 -- Task_D: 사해행위취소 청구의 경우

1. `사건유형/사실상태`를 결정 -- 현재 총 7가지 분류
2. `사건유형/사실상태`에 따라 사용 모듈 결정 - mortgage vs. actio_calc vs. both(mortgage + actio)
3. 결정된 모듈에 따른 프롬프트 배정 -- 단독 프롬프트 / 혼합 프롬프트

## 남은 작업: mortgage 계산식을 업데이트 -> 기존 자료를 더 촘촘하게 사용할 수 있도록 할 것 -> 프롬프트도 업데이트 
3:30pm까지

## 남은 작업: 단독으로 작성된 두 프롬프트(mortgage & actio_calc)를 결합하여 혼합 프롬프트 작성
4:20pm까지

## Task_D -- 조건부 분기 확인하고 실행
6:20pm까지

## Task_E -- 도출된 결과를 바탕으로 claims_evaluated.json 생성
9:30pm까지



-----------------------------------------------------------------------------------------------------


# 청구취지작성규칙_대여금청구.md (fallback: 금전의지급을구하는소_일반론.md)
# 청구취지작성규칙_구상금청구.md
# 청구취지작성규칙_보증채무금청구.md
# 청구취지작성규칙_사해행위취소청구.md


# actio_pauliana_calc_v2.json (fallback: actio_pauliana_calc_v3.json) --> 없애기


-----------------------------------------------------------------------------------------------------

1. 이미 식별된 개별 청구권 파일(`TARGET_CLAIM_FILE` = `C-###_claim_information.json`)에 제시된 필드 항목을 최우선적으로 json 파일에 채워넣는 것을 목표로 하라. 
2. 1을 실행한 후 여전히 비어있는 json 필드를 채워넣을 때, evidence_all.json > BO.json > client_meeting.md 순으로 소스 파일을 사용하라. 


작업 
C-### 다시 작성 --> code로 끼워넣을 것들: 청구취지작성규칙만 

-----------------------------------------------------------------------------------------------------

## 작업
- 사해행위취소 청구가 아닌 사건은 있는 그대로 청구취지 및 청구원인 작성
- 사해행위취소의 경우에만 추가 단계 조건부 분기
  1. csv 파일이 지정한 기준에 따라 `사건유형/사실상태`를 우선 결정하고 그에 따라 사용 JSON 산식 매칭하여 계산식 채움
  2. 채운 계산식을 사용하여 청구취지/청구원인 작성

-----------------------------------------------------------------------------------------------------

최종 작업 결과물 저장
- claims_evaluated.json (이전 stage2_1_claims_evaluated.json 필드 참조 + 현재 사용 중인 정보 필드로 대체)


------------------------------------
|
|  LLM: gemini-3.1-pro-preview
|  reasoning = high
|  verbosity = high
|
------------------------------------

# 목표
1. C-###_claim_information.json의 "case_kind"가 "보증채무 청구", "구상금 청구", "대여금 청구"라면 곧바로 `청구취지`와 `청구원인`을 작성한다. 
2. C-###_claim_information.json의 "case_kind"가 "사해행위취소 청구"에 해당한다면 **조건부 분기 작업**을 거쳐 최종적으로 `청구취지`와 `청구원인`을 작성한다.

## "case_kind"가 "보증채무 청구", "구상금 청구", "대여금 청구"일 때, `청구취지`와 `청구원인` 작성 방법
1. C-###_claim_information.json의 "relief_summary_statement_rule" 필드를 제외한 나머지 필드 정보들을 읽는다.
2. 읽은 정보들을 바탕으로 "relief_summary_statement_rule" 필드 항목 내용을 엄격하게 적용하여 `청구취지`를 최대한 상세하게 작성한다. 
3. 작성한 `청구취지` 내용을 법리적으로, 논리적으로 뒷받침할 수 있도록 `청구원인`을 작성한다. 청구원인을 작성할 때는 1에서 읽어들인 정보들에서 `청구취지`를 법리적으로 논리적으로 뒷받침 할 수 있는 구체적인 정보들을 사용해서 상세하게 작성한다. 

## "case_kind"가 "사해행위취소 청구"일 때, `청구취지`와 `청구원인` 작성 방법
"사해행위취소 청구"의 `청구취지`와 `청구원인` 작성 방식은 아래 제시하는 `조건부 분기 작업`를 따른다. 
1. `조건부 분기 작업` 1: 정보 블록(JSON module) 생성
  - C-###_claim_information.json에서 "relief_summary_statement_rule" 필드를 제외한 나머지 필드 정보들에 `Default_Agent/actio_pauliana_case_type_determination.csv`파일의 기준을 적용하여 해당 청구 내용이 어떤 `사건유형/사실상태`에 해당하는지 결정한다. 
  - 결정된 `사건유형/사실상태`에 매칭되는 `사용 모듈`을 `Default_Agent`폴더에서 불러들인다. 
  - 불러들인 `사용 모듈`의 JSON 스키마를 사용하여 정보 블록(JSON module)을 생성한다. 
    - `사용 모듈`이 `mortgage_fraudulent_act_module_v1_mini.json`이면 `Default_Agent` 폴더에 있는 `actio_pauliana_mortgage.txt`를 지시사항(프롬프트)으로 삼아서 청구취지 작성을 위한 정보 블록(JSON module)을 생성한다. 
    - `사용 모듈`이 `actio_pauliana_calc_v3_mini.json`이면 `Default_Agent` 폴더에 있는 `actio_pauliana_calc.txt`를 지시사항(프롬프트)으로 삼아서 청구취지 작성을 위한 정보 블록(JSON module)을 생성한다. 
    - `사용 모듈`이 `mortgage_fraudulent_act_module_v1_mini.json`와 `actio_pauliana_calc_v3_mini.json` 모두라면, `Default_Agent` 폴더에 있는 `actio_pauliana_mortgage_actio_calc_both.txt`를 지시사항(프롬프트)으로 삼아서 청구취지 작성을 위한 정보 블록(JSON module)을 생성한다. 

2. `조건부 분기 작업` 2: 사해행위취소 청구의 청구취지 및 청구원인 작성
- claim_id별 `조건부 분기 작업` 1에서 생성된 정보 블록의 필드 항목들과, 해당 claim_id의 C-###_claim_information.json의 "relief_summary_statement_rule" 필드를 제외한 나머지 필드 정보들을 전체 참고 정보로 삼는다. 
- 전체 참고 정보들을 사용하여 "relief_summary_statement_rule" 필드가 제시하는 규칙을 준수하여 claim_id에 해당하는 `청구취지`와 `청구원인`을 작성한다. 

# Output 생성 방식
- "case_kind"가 "사해행위취소 청구"에 해당하지 않는 claim_id에 대해서는 해당 `C-###_claim_information.json`에서 
  - "relief_summary_statement_rule" 필드를 없애고
  - "claim_statement" 아래에 "relief_summary"(청구취지)와 "cause_summary"(청구원인) 필드를 생성하여 기입하여
  - `C-###_claim_description.json`으로 저장한다. 
- "case_kind"가 "사해행위취소 청구"에 해당하는 claim_id에 대해서는 해당 `C-###_claim_information.json`에서 
  - "relief_summary_statement_rule" 필드를 없애고
  - "claim_statement" 아래에 "relief_summary"(청구취지)와 "cause_summary"(청구원인) 필드를 생성하여 기입하고,
  - 생성된 JSON module을 `C-###_claim_description.json`의 블록 맨 아래에 붙여서(attach),
  - `C-###_claim_description.json`으로 저장한다. 


-----------------------------------------------------------------------------------------------------

## 참고 정보: 이전의 stage2_1_claims_evaluated.json 스키마

{
  "title": "Stage 2.1 Claims Evaluated Output",
  "description": "Task A: 청구권 후보 도출, 평가 및 당사자 확정 결과",
  "type": "object",
  "properties": {
    "parties": {
      "type": "object",
      "description": "당사자(원고/피고) 확정 및 적격성/리스크 평가 (전체 풀)",
      "properties": {
        "plaintiffs": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "name": { "type": "string" },
              "status": { "type": "string", "enum": ["확정", "후보", "불명"] },
              "reason": { "type": ["string", "null"], "description": "권리귀속 불명확 등으로 '후보'인 경우 사유 1줄" }
            },
            "required": ["name", "status"]
          }
        },
        "defendants": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "name": { "type": "string" },
              "status": { "type": "string", "enum": ["적격", "제외", "대체 필요", "불명"] },
              "execution_risk": { "type": ["string", "null"], "enum": ["HIGH", "MEDIUM", "LOW", null], "description": "무자력인 경우 자동 제외 대신 'HIGH' 태깅" },
              "reason": { "type": ["string", "null"], "description": "상태 결정 및 집행리스크 사유 1줄" }
            },
            "required": ["name", "status"]
          }
        }
      },
      "required": ["plaintiffs", "defendants"]
    },
    "claims": {
      "type": "array",
      "description": "총점 5점 이상인 '청구권' 목록 (합산점수 내림차순 정렬)",
      "maxItems": 12,
      "items": { "$ref": "#/definitions/Claim" }
    },
    "other_claims": {
      "type": "array",
      "description": "총점 5점 미만인 '기타청구권' 목록 (합산점수 내림차순 정렬)",
      "maxItems": 12,
      "items": { "$ref": "#/definitions/Claim" }
    },
    "validation_warnings": {
      "type": "array",
      "description": "불명확성, 증거공백, 모순점 충돌에 따른 전역 경고 메시지 목록 ('VALIDATION WARNING: ...' 형식)",
      "items": { "type": "string", "pattern": "^VALIDATION WARNING:" }
    }
  },
  "required": ["parties", "claims", "other_claims", "validation_warnings"],
  "definitions": {
    "Claim": {
      "type": "object",
      "properties": {
        "claim_id": { "type": "string", "description": "예: C-001" },
        "claim_title": { "type": "string", "description": "청구권 명칭" },
        "relief_summary": { "type": "string", "description": "청구취지 1줄" },
        "cause_summary": { "type": "string", "description": "청구원인 2문장 이내" },
        "legal_basis_hint": { "type": "string", "description": "예: contract/loan, guarantee, reimbursement, unjust enrichment, tort, actio pauliana 등" },
        "source_bo_ids": { "type": "array", "items": { "type": "string" }, "maxItems": 6 },
        "source_fact_ids": { "type": "array", "items": { "type": "string" }, "maxItems": 6 },
        "key_evidence_indexes": { "type": "array", "items": { "type": "string" }, "maxItems": 6 },
        "mapped_parties": {
          "type": "object",
          "description": "해당 청구권에 매핑된 당사자 이름 목록",
          "properties": {
            "plaintiffs": { "type": "array", "items": { "type": "string" } },
            "defendants": { "type": "array", "items": { "type": "string" } }
          },
          "required": ["plaintiffs", "defendants"]
        },
        "evaluation": {
          "type": "object",
          "description": "등급 평가 (각 1~3점, 총 12점 만점)",
          "properties": {
            "win_probability": { "$ref": "#/definitions/EvaluationMetric" },
            "execution_feasibility": { "$ref": "#/definitions/EvaluationMetric" },
            "economic_value": { "$ref": "#/definitions/EvaluationMetric" },
            "statute_of_limitations_urgency": { "$ref": "#/definitions/EvaluationMetric" },
            "total_score": { "type": "integer", "minimum": 1, "maximum": 12 }
          },
          "required": ["win_probability", "execution_feasibility", "economic_value", "statute_of_limitations_urgency", "total_score"]
        }
      },
      "required": [
        "claim_id", "claim_title", "relief_summary", "legal_basis_hint", 
        "source_bo_ids", "source_fact_ids", "key_evidence_indexes", 
        "mapped_parties", "evaluation"
      ]
    },
    "EvaluationMetric": {
      "type": "object",
      "properties": {
        "grade": { "type": "string", "enum": ["High", "Medium", "Low", "불명", "[증거공백]"] },
        "score": { "type": "integer", "minimum": 1, "maximum": 3 },
        "reason": { "type": ["string", "null"], "description": "점수 산정 사유 1줄" }
      },
      "required": ["grade", "score", "reason"]
    }
  }
}
















-----------------------------------------------------------------------------------------------------

Stage 3 -- 요건사실 추출 / 항변, 재반박 도출 / 서증 리스크 작성 / 청구 리스크 작성 
- 이전 작업 내용을 그대로 차용하여 실행

Stage 4 -- 법리 근거 제공을 위한 과거 판례 리서치 
- 이전 작업 내용을 그대로 차용하여 실행

Stage 5 -- 소장 작성
- 기존 작업내용을 모두 통합하여 배치한 후, Claude Opus 4.6을 사용해서 최대한 verbose하게, 대한민국 법조계 문체를 따라, 소장 포맷에 맞춰서 서술 

































































